package co.edu.uniandes.mundo;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.io.File;
import java.rmi.Naming;
import java.rmi.RemoteException;
import java.util.Date;
import java.util.List;
import java.util.Vector;

import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JComponent;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTabbedPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.ListSelectionModel;

import co.edu.uniandes.dto.Ciudad;
import co.edu.uniandes.dto.EstadoEvento;
import co.edu.uniandes.dto.Evento;
import co.edu.uniandes.dto.Pais;
import co.edu.uniandes.dto.TipoEvento;
import co.edu.uniandes.dto.Usuario;
import co.edu.uniandes.services.IServicioCiudad;
import co.edu.uniandes.services.IServicioEvento;
import co.edu.uniandes.services.IServicioPais;
import co.edu.uniandes.services.IServicioTipoEvento;
import co.edu.uniandes.services.IServicioUsuario;
import co.edu.uniandes.services.constantes.ConstantesEstadoEvento;
import co.edu.uniandes.servicio.interfaces.IEventoDialogoConfirmar;

/**
 * Clase que se ejecuta cuando el Usuario es Logueado
 * 
 * @author Rafael Guillermo Blanco Banquez <rafaelg.blancob@gmail.com>
 * 
 */
public class PrincipalGUI extends JFrame implements IEventoDialogoConfirmar{

	/**
	 * serialVersionUID
	 */
	private static final long serialVersionUID = 1L;

	private static final int TAMANIO_TXT = 20;

	private Vector<Pais> vectorTodosPais = null;
	private List<Ciudad> listaCiudadAll = null; 
	private List<TipoEvento> listaTipoEventoAll = null; 
	
	private IServicioEvento servicioEvento = null;
	private IServicioPais servicioPais = null;
	private IServicioCiudad servicioCiudad = null;
	private IServicioTipoEvento servicioTipoEvento = null;
	private IServicioUsuario servicioUsuario = null;

	// COMPONENTE DE EVENTOS
	private JButton botonGuardarEvento = null;
	private JButton botonActualizarEvento = null;
	private JButton botonNuevoEvento = null;
	private JButton botonCancelar = null;
	private JComboBox comboTipoEvento = null;
	private JComboBox comboCiudad = null;
	private JComboBox comboPaisEvento = null;
	private JComboBox comboEstadoEvento = null;
	private JTextField txtDescripcionEvento = null;
	private JTextField txtFechaInicioEvento = null;
	private JTextField txtFechaFinEvento = null;
	private JTextField txtLugarEvento = null;
	private JScrollPane scrollPane = null;
	private JPanel panelListaEvento = null;	
	private Object[] titulosColumnaTable = new Object[9];	
	private JTabbedPane tabbedPane;

	//COMPONENTE DE USUARIOS
	private JButton botonEliminarUsuario = null;
	private JComboBox comboEliminarUsuario = null;
	private JTextField txtMotivoElimina = null;
	
	//COMPONENTE CARGUE
	private JTextField txtFile = null;
	/**
	 * Variable que tiene el id del evento seleccionado
	 * Cuando se modifica o se eliminad un Evento
	 */
	private Integer idEventoSeleccionado;
	/**
	 * Contructor de la Clase Principal Clase que se ejecuta cuando el usuario
	 * se loguea
	 */
	public PrincipalGUI() {

		super("Titulo de la Pantalla Principal");

		
		titulosColumnaTable[0] = "Pais";
		titulosColumnaTable[1] = "Ciudad";
		titulosColumnaTable[2] = "Tipo Evento";
		titulosColumnaTable[3] = "Descripcion";
		titulosColumnaTable[4] = "Fecha Inicio";
		titulosColumnaTable[5] = "Fecha Fin";
		titulosColumnaTable[6] = "Lugar";
		titulosColumnaTable[7] = "Estado";
		titulosColumnaTable[8] = "..";
		
		// CARGAMOS LOS SERVICIO A UTILIZAR EN ESTE COMPONENTE
		try {
			servicioEvento = (IServicioEvento) Naming.lookup(IServicioEvento.NAME_RMI_INVOKE);
			servicioPais = (IServicioPais) Naming.lookup(IServicioPais.NAME_RMI_INVOKE);
			servicioCiudad = (IServicioCiudad) Naming.lookup(IServicioCiudad.NAME_RMI_INVOKE);
			servicioTipoEvento = (IServicioTipoEvento) Naming.lookup(IServicioTipoEvento.NAME_RMI_INVOKE);
			servicioUsuario = (IServicioUsuario) Naming.lookup(IServicioUsuario.NAME_RMI_INVOKE);
		} catch (Exception e) {
			e.printStackTrace();
			JOptionPane.showMessageDialog(this, "Error RMI: " + e.getMessage(),"Error", JOptionPane.ERROR_MESSAGE);
		}

		idEventoSeleccionado = null;
		
		// Panel donde se adicionan los demas Comonente del Inicio de Sesion
		JPanel panelPrincipal = new JPanel(new BorderLayout());
		tabbedPane = new JTabbedPane();
		panelPrincipal.add(tabbedPane, BorderLayout.CENTER);

		JComponent panel1 = creaPanelEvento();
		tabbedPane.addTab("Administrar Eventos", null, panel1,"Administrar Eventos");
		tabbedPane.setMnemonicAt(0, KeyEvent.VK_1);

		JComponent panel2 = creaPanelViajero();
		tabbedPane.addTab("Administrar Viajero", null, panel2,"Administrar Lote");
		tabbedPane.setMnemonicAt(0, KeyEvent.VK_2);

		JComponent panel3 = creaPanelLote();
		tabbedPane.addTab("Administrar Lote", null, panel3, "Administrar Lotes");
		tabbedPane.setMnemonicAt(0, KeyEvent.VK_3);

		// Adicionamos el Panel Principal al JFrame
		getContentPane().add(panelPrincipal);
		setExtendedState(JFrame.MAXIMIZED_BOTH);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setVisible(true);
		pack();

	}
	public static void main(String[] args) {
		new PrincipalGUI();
	}
	/**
	 * 
	 * @param text
	 * @return
	 */
	protected JComponent creaPanelViajero() {
		
		JPanel panelPrincipal = new JPanel(new FlowLayout());

		JPanel panelCentrar = new JPanel(new BorderLayout());
		
		JPanel panelAdicionarEvento = new JPanel(new GridLayout(2, 2));
		panelAdicionarEvento.setBorder(javax.swing.BorderFactory.createTitledBorder("ADMINISTRAR VIAJERO "));

		panelAdicionarEvento.add(crearLabelTemporal("Viajero:"));
		Vector<Usuario> vectorUsuario = new Vector<Usuario>();
		try {
			List<Usuario> listaUsuario = servicioUsuario.consultar();
			for (Usuario usuario : listaUsuario) {
				vectorUsuario.add(usuario);
			}
		} catch (Exception e) {
			
			e.printStackTrace();
			JOptionPane.showMessageDialog(this, "Error RMI: " + e.getMessage(),"Error", JOptionPane.ERROR_MESSAGE);
		}
		comboEliminarUsuario = crearComboTemporal(vectorUsuario);		
		panelAdicionarEvento.add(comboEliminarUsuario);

		panelAdicionarEvento.add(crearLabelTemporal("Motivo:"));
		txtMotivoElimina = crearTextoTemporal(null, TAMANIO_TXT);		
		panelAdicionarEvento.add(txtMotivoElimina);
		
		botonEliminarUsuario = creaButtonTemporal("Eliminar");
		botonEliminarUsuario.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent e) {
				
				eliminarUsuario();

			}

		});
		panelCentrar.add(botonEliminarUsuario,BorderLayout.PAGE_END);
		
		panelPrincipal.add(panelAdicionarEvento);
		panelPrincipal.add(panelCentrar);
		
		return panelPrincipal;
		
	}
	
	/**
	 * 
	 */
	private void eliminarUsuario() {
		
		String mens = ("Esta seguro que desea eliminar al usuario: "+
				((Usuario)comboEliminarUsuario.getSelectedItem()).getLogin()+" ?");
		
		new ConfirmarGUI(this, true, mens , "Cancelar", "Eliminar", this);
		
		
	}

	/**
	 * 
	 * @param text
	 * @return
	 */
	protected JComponent creaPanelEvento() {

		JPanel panelPrincipal = new JPanel(new FlowLayout());

		JPanel panelCentrar = new JPanel(new BorderLayout());
		
		JPanel panelAdicionarEvento = new JPanel(new GridLayout(8, 2));
		panelAdicionarEvento.setBorder(javax.swing.BorderFactory.createTitledBorder("ADICIONAR / MODIFICAR EVENTOS"));

		// PAIS
		panelAdicionarEvento.add(crearLabelTemporal("País:"));

		Vector<Pais> vectorPais = new Vector<Pais>();
		try {
			vectorPais = servicioPais.obtenerPais();
		} catch (Exception e) {
			
			e.printStackTrace();
			JOptionPane.showMessageDialog(this, "Error RMI: " + e.getMessage(),"Error", JOptionPane.ERROR_MESSAGE);
		}
		comboPaisEvento = crearComboTemporal(vectorPais);
		panelAdicionarEvento.add(comboPaisEvento);
		
		
		// CIUDAD
		panelAdicionarEvento.add(crearLabelTemporal("Ciudad:"));
		Vector<Ciudad> vectorCiudad = new Vector<Ciudad>();
		try {
			
			if(vectorPais.size() > 0){				
				List<Ciudad> listaCiudades = servicioCiudad.consultarPais(vectorPais.get(0).getId());
				for (Ciudad ciudad : listaCiudades) {
					vectorCiudad.add(ciudad);
				}
			}			
		} catch (Exception e) {
			e.printStackTrace();
			JOptionPane.showMessageDialog(this, "Error RMI: " + e.getMessage(),"Error", JOptionPane.ERROR_MESSAGE);
		}

		comboCiudad = crearComboTemporal(vectorCiudad);
		panelAdicionarEvento.add(comboCiudad);

		// TIPO EVENTO
		panelAdicionarEvento.add(crearLabelTemporal("Tipo Evento:"));
		Vector<TipoEvento> vectorEvento = new Vector<TipoEvento>();

		try {
			List<TipoEvento> listaTipoEvento = servicioTipoEvento
					.consultarTipoEvento();

			for (TipoEvento tipoEvento : listaTipoEvento) {
				vectorEvento.add(tipoEvento);
			}
		} catch (Exception e) {
//			e.printStackTrace();
//			JOptionPane.showMessageDialog(this, "Error RMI: " + e.getMessage(),"Error", JOptionPane.ERROR_MESSAGE);
		}

		comboTipoEvento = crearComboTemporal(vectorEvento);
		panelAdicionarEvento.add(comboTipoEvento);

		// DESCRIPCION
		panelAdicionarEvento.add(crearLabelTemporal("Descripcion:"));
		txtDescripcionEvento = crearTextoTemporal(null, TAMANIO_TXT);
		panelAdicionarEvento.add(txtDescripcionEvento);

		// FECHA INICIO
		panelAdicionarEvento.add(crearLabelTemporal("Fecha Inicio (dd/mm/aaaa):"));
		txtFechaInicioEvento = crearTextoTemporal(null, TAMANIO_TXT);
		panelAdicionarEvento.add(txtFechaInicioEvento);

		// FECHA FIN
		panelAdicionarEvento.add(crearLabelTemporal("Fecha Fin (dd/mm/aaaa):"));
		txtFechaFinEvento = crearTextoTemporal(null, TAMANIO_TXT);
		panelAdicionarEvento.add(txtFechaFinEvento);

		// LUGAR
		panelAdicionarEvento.add(crearLabelTemporal("Lugar:"));
		txtLugarEvento = crearTextoTemporal(null, TAMANIO_TXT);
		panelAdicionarEvento.add(txtLugarEvento);

		panelListaEvento = new JPanel(new BorderLayout());
		panelListaEvento.setBorder(javax.swing.BorderFactory.createTitledBorder("LISTADO EVENTOS"));

		// ESTADO EVENTO
		panelAdicionarEvento.add(crearLabelTemporal("Estado:"));
		Vector<EstadoEvento> estadoEvento = cargarEstadoEvento();
		comboEstadoEvento = crearComboTemporal(estadoEvento);
		panelAdicionarEvento.add(comboEstadoEvento);
				
		JPanel panelBotones = new JPanel(new FlowLayout());
		botonGuardarEvento = creaButtonTemporal("Guardar");
		botonGuardarEvento.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent e) {

				adicionarEvento();

			}

		});
		botonGuardarEvento.setVisible(false);

		botonActualizarEvento = creaButtonTemporal("Actualizar");
		botonActualizarEvento.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent e) {

				actualizarEvento();

			}
		});
		botonActualizarEvento.setVisible(false);

		botonNuevoEvento = creaButtonTemporal("Crear nuevo evento");
		botonNuevoEvento.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent e) {

				nuevoEvento();

			}
		});
		botonNuevoEvento.setVisible(true);

		botonCancelar = creaButtonTemporal("Cancelar");
		botonCancelar.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent e) {

				cancelarEvento();

			}
		});
		botonCancelar.setVisible(false);
		
		panelBotones.add(botonGuardarEvento);
		panelBotones.add(botonActualizarEvento);
		panelBotones.add(botonNuevoEvento);
		panelBotones.add(botonCancelar);

		panelCentrar.add(panelAdicionarEvento, BorderLayout.CENTER);
		panelCentrar.add(panelBotones,BorderLayout.PAGE_END);
		
		panelPrincipal.add(panelListaEvento);
		panelPrincipal.add(panelCentrar);

		
		recargarTableEvento();
		
		establecerDisable(false);
		
		return panelPrincipal;
	}

	/**
	 * 
	 */
	private void recargarTableEvento(){
		
		String[][] listaEventoTabla = new String[0][titulosColumnaTable.length];
		
		try {
			
			if(scrollPane != null){
				panelListaEvento.remove(scrollPane);
			}
			
			List<Evento> listaEventoAll = servicioEvento.consultar();

			if(listaEventoAll.size() > 0){
				
				listaEventoTabla = new String[listaEventoAll.size()][titulosColumnaTable.length];
				int i = -1;
				for (Evento evento : listaEventoAll) {
					
					i += 1;
					
					Ciudad ciudad = getCiudad(evento.getCiudad());
					listaEventoTabla[i] = new String[]{
							getPais(getCiudad(ciudad.getPais()).getId()).getNombre(),
							ciudad.getNombre(),
							getTipoEvento(evento.getTipoEvento()).getNombre(),
							evento.getNombre(),													
							evento.getFechaInicio().toString(),
							evento.getFechaFin().toString(),
							evento.getLugar(),
							getEstadoEvento(evento.getEstado()).getDescripcion(),
							String.valueOf(evento.getId())};
				}
				
			}
			
		} catch (Exception e) {
			e.printStackTrace();
			JOptionPane.showMessageDialog(this, "Error RMI: " + e.getMessage(),"Error", JOptionPane.ERROR_MESSAGE);
		}
		
		final JTable tableEvento = new JTable(listaEventoTabla,titulosColumnaTable);
		tableEvento.setSelectionBackground(Color.GRAY);
		tableEvento.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
		tableEvento.setPreferredScrollableViewportSize(new Dimension(700, 300));
		tableEvento.setFillsViewportHeight(true);
		
		tableEvento.addMouseListener(new MouseAdapter(){
			public void mouseClicked(MouseEvent e) {
				seleccionarFilaEnTabla(tableEvento);
            }
		});
		
        scrollPane = new JScrollPane(tableEvento);
        panelListaEvento.add(scrollPane);
        panelListaEvento.repaint();
        
	}
	
	/**
	 * 
	 * @param table
	 */
	private void seleccionarFilaEnTabla(final JTable tableEvento) {
		
		int index = tableEvento.getSelectedRow();
		if(index != -1){
			
			javax.swing.table.TableModel model = tableEvento.getModel();
			Object objeto = model.getValueAt(index, 8);
			
			if(objeto != null){
	        	
				try {
										
					List<Evento> listaEventoAll = servicioEvento.consultar();

					if(listaEventoAll.size() > 0){
						
						for (Evento evento : listaEventoAll) {
							if(evento.getId().equals(Integer.parseInt(objeto.toString().trim()))){
								
								idEventoSeleccionado = evento.getId();
								modificarEvento(evento);
								
							}
						}
						
					}
					
				} catch (Exception e) {
					e.printStackTrace();
					JOptionPane.showMessageDialog(this, "Error RMI: " + e.getMessage(),"Error", JOptionPane.ERROR_MESSAGE);
				}
				
	        }
		}
        
    }
	
	/**
	 * Evento crear un guardar evento
	 */
	private void adicionarEvento() {

		// primero validamos la informacion
		// que este cumpleta y correcta
		if (!validarEvento()) {
			return;
		}
		
		//Cargamos el Evento
		Evento unEvento = cargarEvento();
		try {
			servicioEvento.insertar(unEvento);
			JOptionPane.showMessageDialog(this, "Evento adicionado correctamente","Evento", JOptionPane.INFORMATION_MESSAGE);
			
			establecerDisable(false);
			limpiar();
			recargarTableEvento();
			
			cancelarEvento();
			
		} catch (RemoteException e) {
			e.printStackTrace();
			JOptionPane.showMessageDialog(this, "Error RMI: " + e.getMessage(),"Error", JOptionPane.ERROR_MESSAGE);
		} catch (Exception e) {
			e.printStackTrace();
			JOptionPane.showMessageDialog(this, "Error: " + e.getMessage(),"Error", JOptionPane.ERROR_MESSAGE);
		}		
	}

	/**
	 * 
	 * @return
	 */
	private Evento cargarEvento(){
		Evento unEvento = new Evento();

		try {
			
			unEvento.setCiudad(((Ciudad)comboCiudad.getSelectedItem()).getId());
			unEvento.setEstado(((EstadoEvento)comboEstadoEvento.getSelectedItem()).getId());
			unEvento.setTipoEvento(((TipoEvento)comboTipoEvento.getSelectedItem()).getId());
			unEvento.setNombre(txtDescripcionEvento.getText().trim());
			unEvento.setFechaInicio(new Date(txtFechaInicioEvento.getText().trim()));
			unEvento.setFechaFin(new Date(txtFechaFinEvento.getText().trim()));
			unEvento.setLugar(txtLugarEvento.getText().trim());
			
		} catch (Exception e) {
			e.printStackTrace();
			JOptionPane.showMessageDialog(this, "Error: " + e.getMessage(),"Error", JOptionPane.ERROR_MESSAGE);
		}
		
		return unEvento;
	}
	/**
	 * 
	 * @param disable
	 */
	private void establecerDisable(boolean disable){
		
		txtDescripcionEvento.setEnabled(disable);
		txtFechaFinEvento.setEnabled(disable);
		txtFechaInicioEvento.setEnabled(disable);
		txtLugarEvento.setEnabled(disable);
		
		comboCiudad.setEnabled(disable);
		comboPaisEvento.setEnabled(disable);
		comboTipoEvento.setEnabled(disable);	
		comboEstadoEvento.setEnabled(disable);
		
	}
	/**
	 * 
	 */
	private void limpiar(){
		
		txtDescripcionEvento.setText("");
		txtFechaFinEvento.setText("");
		txtFechaInicioEvento.setText("");
		txtLugarEvento.setText("");
		
	}
	/**
	 * Evento crear un Nuevo evento
	 */
	private void nuevoEvento() {

		botonActualizarEvento.setVisible(false);
		botonGuardarEvento.setVisible(true);
		botonNuevoEvento.setVisible(false);
		botonCancelar.setVisible(true);
		
		establecerDisable(true);
		
		limpiar();
	}
	
	/**
	 * Evento crear un Nuevo evento
	 */
	private void modificarEvento(Evento evento) {

		botonActualizarEvento.setVisible(true);
		botonGuardarEvento.setVisible(false);
		botonNuevoEvento.setVisible(false);
		botonCancelar.setVisible(true);
		
		establecerDisable(true);
		
		limpiar();
		
		txtDescripcionEvento.setText(evento.getNombre());
		txtFechaFinEvento.setText(evento.getFechaInicio().getDay()+"/"+evento.getFechaInicio().getMonth()+"/"+evento.getFechaInicio().getYear());
		txtFechaInicioEvento.setText(evento.getFechaFin().getDay()+"/"+evento.getFechaFin().getMonth()+"/"+evento.getFechaFin().getYear());
		txtLugarEvento.setText(evento.getLugar());
		
	}
	

	/**
	 * Evento crear un Actualizar evento
	 */
	private void actualizarEvento() {

		// primero validamos la informacion
		// que este cumpleta y correcta
		if (!validarEvento()) {
			return;
		}
		
		//Cargamos el Evento
		Evento unEvento = cargarEvento();
		try {
			unEvento.setId(idEventoSeleccionado);
			servicioEvento.actualizar(unEvento);
			JOptionPane.showMessageDialog(this, "Evento actualizado correctamente","Evento", JOptionPane.INFORMATION_MESSAGE);
			
			establecerDisable(false);
			limpiar();
			recargarTableEvento();
			
		} catch (RemoteException e) {
			e.printStackTrace();
			JOptionPane.showMessageDialog(this, "Error RMI: " + e.getMessage(),"Error", JOptionPane.ERROR_MESSAGE);
		} catch (Exception e) {
			e.printStackTrace();
			JOptionPane.showMessageDialog(this, "Error: " + e.getMessage(),"Error", JOptionPane.ERROR_MESSAGE);
		}
	}
	/**
	 * Evento cancela un Guardar/Actualizar evento
	 */
	private void cancelarEvento() {

		botonActualizarEvento.setVisible(false);
		botonGuardarEvento.setVisible(false);
		botonNuevoEvento.setVisible(true);
		botonCancelar.setVisible(false);
		
		establecerDisable(false);
		limpiar();
		

	}
	/**
	 * Metodo que Valida la informacion de los eventos
	 * 
	 * @return
	 */
	private boolean validarEvento() {

		if (txtDescripcionEvento.getText() == null
				|| txtDescripcionEvento.getText().trim().length() == 0) {
			JOptionPane.showMessageDialog(this,
					"Por favor ingrese una descripcion válida",
					"Informacion Incompleta", JOptionPane.ERROR_MESSAGE);
			return false;
		}

		if (txtFechaInicioEvento.getText() == null
				|| txtFechaInicioEvento.getText().trim().length() == 0) {
			JOptionPane.showMessageDialog(this,
					"Por favor ingrese una fecha inicio válida (dd/mm/aaaa)",
					"Informacion Incompleta", JOptionPane.ERROR_MESSAGE);
			return false;
		}
		try {
			new Date(txtFechaInicioEvento.getText().trim());
		} catch (Exception e) {
			JOptionPane.showMessageDialog(this,
					"Por favor ingrese una fecha inicio válida (dd/mm/aaaa)",
					"Informacion Incompleta", JOptionPane.ERROR_MESSAGE);
			return false;
		}

		if (txtFechaFinEvento.getText() == null
				|| txtFechaFinEvento.getText().trim().length() == 0) {
			JOptionPane.showMessageDialog(this,
					"Por favor ingrese una fecha fin válida (dd/mm/aaaa)",
					"Informacion Incompleta", JOptionPane.ERROR_MESSAGE);
			return false;
		}
		try {
			new Date(txtFechaFinEvento.getText().trim());
		} catch (Exception e) {
			JOptionPane.showMessageDialog(this,
					"Por favor ingrese una fecha fin válida (dd/mm/aaaa)",
					"Informacion Incompleta", JOptionPane.ERROR_MESSAGE);
			return false;
		}

		if (txtLugarEvento.getText() == null
				|| txtLugarEvento.getText().trim().length() == 0) {
			JOptionPane.showMessageDialog(this,
					"Por favor ingrese un lugar de evento válido",
					"Informacion Incompleta", JOptionPane.ERROR_MESSAGE);
			return false;
		}

		return true;
	}

	/**
	 * 
	 * @param componente
	 * @param label
	 * @return
	 */
	private JLabel crearLabelTemporal(String label) {

		JLabel etiqueta = new JLabel(label);
		return etiqueta;

	}

	/**
	 * 
	 * @param item
	 * @return
	 */
	private JComboBox crearComboTemporal(Vector<?> item) {

		JComboBox combo = new JComboBox(item);

		return combo;
	}

	/**
	 * 
	 * @param item
	 * @return
	 */
	private JTextField crearTextoTemporal(String txt, int col) {

		JTextField txtField = new JTextField(txt, col);

		return txtField;
	}

	/**
	 * 
	 * @param txt
	 * @return
	 */
	private JButton creaButtonTemporal(String txt) {
		JButton btn = new JButton(txt);
		return btn;
	}


	/**
	 * 
	 * @param text
	 * @return
	 */
	protected JComponent creaPanelLote() {
		
		JPanel panelPrincipal = new JPanel(new FlowLayout());

		JPanel panelCentrar = new JPanel(new BorderLayout());
		
		JPanel panelAdicionarEvento = new JPanel(new GridLayout(1, 2));
		panelAdicionarEvento.setBorder(javax.swing.BorderFactory.createTitledBorder("ADICIONAR / MODIFICAR EVENTOS"));
		
		// Seleccione archivo
		panelAdicionarEvento.add(crearLabelTemporal("Seleccione Archivo:"));
		
		JPanel pInterno = new JPanel(new FlowLayout());
		
		txtFile = crearTextoTemporal(null, TAMANIO_TXT + 20);
		txtFile.setEditable(false);
		pInterno.add(txtFile);
		
		JButton btn = creaButtonTemporal("...");
		btn.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent e) {
			
				JFileChooser fileChooser = new JFileChooser();
				int seleccion = fileChooser.showOpenDialog(null);
				if (seleccion == JFileChooser.APPROVE_OPTION)
				{
				   File fichero = fileChooser.getSelectedFile();
				   if(fichero != null && fichero.exists()){
					   txtFile.setText(fichero.getAbsolutePath());
				   }
				}
				
			}
		});				
		pInterno.add(btn);
		
		panelAdicionarEvento.add(pInterno);
		
		JButton btncargar = creaButtonTemporal("Cargar");
		pInterno.add(btncargar);
		btncargar.addActionListener(new ActionListener() {			
			@Override
			public void actionPerformed(ActionEvent e) {
				try {
					if(txtFile == null || txtFile.getText().trim().length() == 0 || !(new File(txtFile.getText().trim()).exists())){
						
						JOptionPane.showMessageDialog(null, "PRIMERO SELECCIONE UN ARCHIVO.","Error", JOptionPane.ERROR_MESSAGE);						
						return;
					}
					servicioEvento.cargar(txtFile.getText().trim());
					JOptionPane.showMessageDialog(null, "ARCHIVO CARGADO CORRECTAMENTE.","Informacion", JOptionPane.INFORMATION_MESSAGE);
					txtFile.setText("");
				} catch (Exception e2) {
					e2.printStackTrace();
					JOptionPane.showMessageDialog(null, "Error: " + e2.getMessage(),"Error", JOptionPane.ERROR_MESSAGE);
				}
				
			}
		});
		
		panelPrincipal.add(panelAdicionarEvento);
		panelCentrar.add(panelPrincipal,BorderLayout.CENTER);
		
		return panelCentrar;
	}
	
	/**
	 * 
	 * @return
	 */
	private Vector<EstadoEvento> cargarEstadoEvento(){
		
		Vector<EstadoEvento> estadoE = new Vector<EstadoEvento>(2);
		
		estadoE.add(new EstadoEvento(ConstantesEstadoEvento.ACTIVO,ConstantesEstadoEvento.ACTIVO_DES));
		estadoE.add(new EstadoEvento(ConstantesEstadoEvento.CANCELADO,ConstantesEstadoEvento.CANCELADO_DES));
		
		return estadoE;
	}		
	
	/**
	 * 
	 * @param idEstadoEvento
	 * @return
	 */
	private EstadoEvento getEstadoEvento(Integer idEstadoEvento){
		
		Vector<EstadoEvento> estadoE = cargarEstadoEvento();
		for (EstadoEvento estadoEvento : estadoE) {
			if(idEstadoEvento.equals(estadoEvento.getId())){
				return estadoEvento;
			}
		}
		
		return null;
	}
	/**
	 * 
	 * @param idCiudad
	 * @return
	 */
	private Pais getPais(Integer idPais){
		
		if(vectorTodosPais == null){
			try {
				vectorTodosPais = servicioPais.obtenerPais();
			} catch (Exception e) {
				e.printStackTrace();
				JOptionPane.showMessageDialog(this, "Error RMI: " + e.getMessage(),"Error", JOptionPane.ERROR_MESSAGE);
			}
		}
		for (Pais unPais : vectorTodosPais) {
			if(idPais.equals(unPais.getId())){
				return unPais;
			}
		}
		return null;
	}
	
	/**
	 * 
	 * @param idCiudad
	 * @return
	 */
	private Ciudad getCiudad(Integer idCiudad){
		
		if(listaCiudadAll == null){
			try {
				listaCiudadAll = servicioCiudad.consultar();
			} catch (RemoteException e) {
				e.printStackTrace();
				JOptionPane.showMessageDialog(this, "Error RMI: " + e.getMessage(),"Error", JOptionPane.ERROR_MESSAGE);
			} catch (Exception e) {
				e.printStackTrace();
				JOptionPane.showMessageDialog(this, "Error: " + e.getMessage(),"Error", JOptionPane.ERROR_MESSAGE);
			}
		}
		for (Ciudad unaCiudad : listaCiudadAll) {
			if(idCiudad.equals(unaCiudad.getId())){
				return unaCiudad;
			}
		}	
		return null;
	}	
	
	/**
	 * 
	 * @param idTipoEvento
	 * @return
	 */
	private TipoEvento getTipoEvento(Integer idTipoEvento){
		
		if(listaTipoEventoAll == null){
			try {
				listaTipoEventoAll = servicioTipoEvento.consultarTipoEvento();
			} catch (RemoteException e) {
				e.printStackTrace();
				JOptionPane.showMessageDialog(this, "Error RMI: " + e.getMessage(),"Error", JOptionPane.ERROR_MESSAGE);
			} catch (Exception e) {
				e.printStackTrace();
				JOptionPane.showMessageDialog(this, "Error: " + e.getMessage(),"Error", JOptionPane.ERROR_MESSAGE);
			}
		}
		for (TipoEvento unTipoEvento : listaTipoEventoAll) {
			if(idTipoEvento.equals(unTipoEvento.getId())){
				return unTipoEvento;
			}
		}
		return null;
	}

	@Override
	public void eventoCancelar() {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void eventoContinuar() {
		
		try {
			servicioUsuario.eliminar(((Usuario)comboEliminarUsuario.getSelectedItem()).getId());
			JOptionPane.showMessageDialog(this, "Usuario Eliminado correctamente","Usuario", JOptionPane.INFORMATION_MESSAGE);
		} catch (RemoteException e) {
			e.printStackTrace();
			JOptionPane.showMessageDialog(this, "Error RMI: " + e.getMessage(),"Error", JOptionPane.ERROR_MESSAGE);
		} catch (Exception e) {
			e.printStackTrace();
			JOptionPane.showMessageDialog(this, "Error: " + e.getMessage(),"Error", JOptionPane.ERROR_MESSAGE);
		}
		
	}
	
}
